--[[ 编码: WMS-29-10 名称: 盘点容器货品明细-确定 作者:HAN 日期:2025-1-29 级别:固定 (说明本段代码在项目中不太会变化) 函数: ClickOK 功能: -- 创建【盘点差异表】Count_Diff -- 修改【计划盘点容器】CP_Count_Container 的盘点人信息和状态 更改记录: --]] wms_base = require( "wms_base" ) function ClickOK ( strLuaDEID ) local nRet, strRetInfo local attrs -- step1 获取5601码盘界面中表头界面的输入参数(容器编号/托盘号) nRet, attrs = m3.GetSysInputParameter( strLuaDEID ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前输入面板里的属性失败! "..attrs ) end local input_attr = m3.KeyValueAttrsToObjAttr(attrs) local cntr_code = input_attr.S_CNTR_CODE local count_no = input_attr.S_COUNT_NO if (cntr_code == nil or cntr_code == '') then lua.Error( strLuaDEID, debug.getinfo(1), "主界面中容器编码不能为空!" ) end if (count_no == nil or count_no == '') then lua.Error( strLuaDEID, debug.getinfo(1), "主界面中盘点单号不能为空!" ) end -- *** 这里要注意获取盘点计划单,需要和PDA的界面一起检查一下 local strUserLogin, strUserName nRet, strUserLogin, strUserName = mobox.getCurUserInfo( strLuaDEID ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前操作人员信息失败! "..strUserLogin ) end local strDataJson -- step2 获取"盘点货品"中的数据对象,这些数据保存在 DataJson中 格式如下: -- [{"page_name":"", ext_data:{},"item_list":[{"id":"","attrs":[{"attr":"x1","value":"xx"},...]},..]},...] local page nRet, page = m3.GetSysDataJson( strLuaDEID ) if ( nRet ~=0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "无法获取数据包!"..obj ) end local item_list = page[1].item_list local n local qty, check_qty local item = m3.KeyValueAttrsToObjAttr(item_list[1].attrs) local count_cg_detail -- 判断是否存在必须输入的属性 if ( item.F_QTY == nil ) then lua.Error( strLuaDEID, debug.getinfo(1), "盘点输入页面必须有F_QTY属性!" ) end if ( item.F_ACT_QTY == nil ) then lua.Error( strLuaDEID, debug.getinfo(1), "盘点输入页面必须有F_ACT_QTY属性!" ) end -- step3 创建【盘点差异表】 local curTime = os.date("%Y-%m-%d %H:%M:%S") for n = 1, #item_list do item = m3.KeyValueAttrsToObjAttr(item_list[n].attrs) qty = lua.StrToNumber( item.F_QTY ) check_qty = lua.StrToNumber( item.F_ACT_QTY ) if ( qty ~= check_qty ) then -- 有差异,创建【盘点差异表】 -- 生成差异表的时候需要完整的 【Count_CG_Detail】 nRet, count_cg_detail = m3.GetDataObject( strLuaDEID, "Count_CG_Detail", item_list[n].id ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), count_cg_detail ) end local count_diff = m3.AllocObject(strLuaDEID,"Count_Diff") count_diff.cntr_code = cntr_code count_diff.count_no = count_no count_diff.qty = qty count_diff.act_qty = check_qty count_diff.cell_no = count_cg_detail.cell_no count_diff.item_code = count_cg_detail.item_code count_diff.item_name = count_cg_detail.item_name count_diff.item_state = count_cg_detail.item_state count_diff.batch_no = count_cg_detail.batch_no count_diff.serial_no = count_cg_detail.serial_no count_diff.checker = strUserName count_diff.checker_id = strUserLogin count_diff.t_check = curTime nRet, cg_detail = m3.CreateDataObj( strLuaDEID, count_diff ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), 'mobox 创建【盘点差异表】对象失败!'..cg_detail ) end end end -- step4 更新【计划盘点容器】中的盘点状态 local strCondition = "S_COUNT_NO = '"..count_no.."' AND S_CNTR_CODE = '"..cntr_code.."'" -- N_B_STATE = 3 完成 local strSetAttr = "N_B_STATE = 3, S_CHECKER = '"..strUserName.."', S_CHECKER_ID = '"..strUserLogin.."', T_CHECK = '"..curTime.."'" nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "CP_Count_Container", strCondition, strSetAttr ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "updateDataAttrByCondition失败"..strRetInfo ) end end